<?php
class login_LoginController extends Apm_Controller_Base
{
	public function loginAction()
	{
		//ブラウザキャッシュ削除
		$this->getResponse()->setHeader("Cache-Control","no-cache")->setHeader("Pragma","no-cache")->sendResponse();
		$this->_model = new Login_Model_Login();
		$this->_params = $this->getParameters();

		// ログインユーザ認証
		try {
			//トランザクション開始
			$db = $this->_model->getDbConnection();
			$this->_model->startTransaction($db);

			$id = $this->_params['eID'];
			$password = $this->_params['ePass'];
			$isAutoLogin = $this->_params['autoLoginFlg'];
			$result = $this->_model->getAccount($id,$password);
			$this->_data['id']   = $id;
			$this->_data['name'] = $result[0]['M92_HANDLE_NAME'];

			if (count($result) > 0){
				// ログイン後処理
				$this->afterLogin($result[0],$db,$isAutoLogin);
				// コミット
				$this->_model->commitTransaction($db);
				$this->loginOk();

			} else {
				$this->loginNg();
			}

		} catch (Exception $e) {
			// エラー発生時
			// ロールバック
			$this->_model->rollbackTransaction($db);
		}
		// コネクションクローズ
		$db->closeConnection();
	}

	public function logoutAction()
	{
        if(APPLICATION_ENV == 'development'){
            $session = $this->getSessionParameters();
            $session->eID = '';
        }
		header("HTTP/1.1 204 No Content");
		exit;
	}
	private function loginOk()
	{
        if(APPLICATION_ENV == 'development'){
            $session = $this->getSessionParameters();
            $session->eID = $this->_data['id'];
        }
		Apm_Util::outputXmlHttpHeader();
		$name = $this->_data['name'];
		Apm_Util::outputLoginXML('true',$name);
		$this->setCookies();
		$allHeaderInfo = getallheaders();
		__log_debug(__FILE__, __LINE__, __METHOD__, '---------->>>');
		__log_debug_array(__FILE__, __LINE__, __METHOD__,$allHeaderInfo );
		__log_debug(__FILE__, __LINE__, __METHOD__, '----------<<<');
		exit;
	}
	private function loginNg()
	{
        if(APPLICATION_ENV == 'development'){
            $session = $this->getSessionParameters();
            $session->eID = '';
        }
		Apm_Util::outputXmlHttpHeader();
		//Apm_Util::outputXmlData('false', 'status');
		Apm_Util::outputLoginXML('false','');
		$this->setCookies();
		$allHeaderInfo = getallheaders();
		__log_debug(__FILE__, __LINE__, __METHOD__, '---------->>>');
		__log_debug_array(__FILE__, __LINE__, __METHOD__,$allHeaderInfo );
		__log_debug(__FILE__, __LINE__, __METHOD__, '----------<<<');
		exit;
	}

	private function afterLogin($userInfo,$db,$flg = 0) {

		// ログインログ入力
		$resInsertLog = $this->_model->InsertLog($userInfo['M92_USER_CD'],$db);

		// ログイン情報更新
		$resLoginDate = $this->_model->loginDate($userInfo['M92_USER_CD'],$db);

		// 後続処理
		$favorites = $this->getFavoriteCookie();
		if (count($favorites) > 0 ) {
			$this->_model = new Login_Model_Login();
			$favoritesParam['TorokuKbn'] = 1;
			$favoritesParam['userCd'] = $userInfo['M92_USER_CD'];

			for ($i = 0; $i < count($favorites); $i++) {
				$favoritesParam['heyaCd'] = $favorites[$i];

				//登録処理
				$result = $this->_model->insertFavoriteBukken($favoritesParam);
			}
		}

		// お気に入りクッキー削除
		setcookie("AP_LITE1","",time()-1800,"/");
		setcookie("AP_LITE1","",time()-1800,"/");
		setcookie("AP_LITE_CNT","",time()-1800,"/srv/");
		setcookie("AP_LITE_CNT","",time()-1800,"/srv/");

		// クッキー作成
		// TODO 日付
		$cookieLimit = 0;

		if ( $flg == 1 ){
			setcookie ("AutoLogin",$userInfo['M92_USER_CD'],$cookieLimit , "/");
		}
		setcookie ("UID",$userInfo['M92_USER_CD'], $cookieLimit , "/mypage/");
		setcookie ("Email",$userInfo['M92_E_MAIL'], $cookieLimit , "/mypage/");
		setcookie ("NickName",$userInfo['M92_HANDLE_NAME'], $cookieLimit , "/mypage/");
	}

    /**
     * Cookieへのお気に入り登録済みの部屋コードの配列を取得
     *
     * @return Cookieへのお気に入り登録済みの部屋コードの配列
     */
    protected function getFavoriteCookie()
    {
		$result = array();

		// 登録件数
		$strLiteCnt = $_COOKIE["AP_LITE_CNT"];
		if ($strLiteCnt == ""){
			$strLiteCnt=0;
		}

		// 物件データCookieを連想配列で取得
		$cookieArray = $this->getCookieAll("AP_LITE",$strLiteCnt);
		if(empty($cookieArray)){
			// キーで昇順ソート
			ksort($cookieArray);
		}

		for ($i = 0; $i < count($cookieArray); $i++ )
		{
			$result[$i] = $cookieArray["Bukken" . ($i + 1)];
		}
		return $result;
    }


/**
	*	サブキーを20以上持つCookieデータをまとめて取得
	*
	*	サブキーをインデックスにした連想配列を返す
	*
	*	strName：Cookieの名称
	*/
	protected function getCookieAll($strName, $maxCnt)
	{
		$result = array();

		$cookieCnt = (int)($maxCnt / Apm_Config_Rstdtl::MAX_CNT_SUBKEY) + 1;

		for($i=1;$i <= $cookieCnt; $i++){
			$temp = $this->getCookie($strName.$i);

			foreach($temp as $key => $value){
				$result[$key] = $value;
			}
		}

		return $result;
	}

	/**
	*	Cookieデータ取得
	*	サブキーをインデックスにした連想配列を返す
	*
	*	strName：Cookieの名称
	*/
	public function getCookie($strName)
	{
		$result = array();

		$cookieVal = $_COOKIE[$strName];

		$cookieArray = explode("&",$cookieVal);

		// 物件別データを連想配列に格納
		foreach($cookieArray as $bukenData ){
			// Cookieサブキーと値を分割
			$temp = explode("=",$bukenData);
			// 連想配列に格納
			$tempArray[$temp[0]] = $temp[1];
		}

		// 空要素削除
		$result = array_diff( $tempArray, array( "" ) );

		return $result;
	}

}
?>
